/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import entidades.Convenio;
import entidades.EstadoUsuario;
import entidades.Usuario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import negocio.ConvenioInterface;
import negocio.UsuarioInterface;

/**
 *
 * @author Angel
 */
@ManagedBean
public class LoginBean implements Serializable {

    private entidades.Usuario usuario;
    @EJB
    private UsuarioInterface usuarioSessionBean;
    @EJB
    private ConvenioInterface convenioSessionBean;
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    
    // Variables de formatos
    private boolean objetivoInicialB;
    private boolean seguimientoBitacoraSemanalB;
    private boolean seguimientoInformeMensualB;
    private boolean calificacionDesempenoB;
    private boolean evaluacionFinalLogrosB;
    private boolean informeFinalPracticaB;
    private boolean resumenSemestralPracticaProfesionalB;
    private boolean seguimientoTelefonicoPracticaB;
    
    // Variables de listas de formatos
    private boolean listaResumenSemestralPracticaProfesionalB;
    private boolean listaseguimientoTelefonicoPracticaB;
    private boolean listaSeguimientoBitacoraSemanalBean;
    private boolean listaCalificacionDesempenoB;
    private boolean listaEvaluacionFinalLogrosB;
    private boolean listaInformeFinalPracticaB;
    private boolean listaSeguimientoInformeMensualB;
    private boolean listaObjetivoInicialB;
    
    // Variables de listas de administracion
    private boolean listaSupervisoresB;
    private boolean listaSupervisoresEntidadB;
    private boolean listaPracticantesB;
    private boolean listaConveniosB;
    private boolean listaCoordinadoresPracticas;
    private boolean listaEntidadesB;
    private boolean cargarEntidadB;
    private boolean cargarConveniosB;
    private boolean asignarConvenioEstudianteB;
    
    // Variables para menu
    private boolean formatosB;
    private boolean administracionB;
    private boolean consultarFormatosB;
    private boolean diligenciarFormatosB;
    private boolean editarFormatosB;
    
    // Variables adicionales Sesion
    private boolean visibleMenu;
    private boolean cambioClaveB;
    private boolean datosPerfilB;
    
    // Variables de roles
    private final int ROL_ADMINISTRADOR = 1;
    private final int ROL_COORDINADOR = 2;
    private final int ROL_SUPERVISOR_UNIVERSITARIO = 3;
    private final int ROL_SUPERVISOR_ENTIDAD = 4;
    private final int ROL_PRACTICANTE = 5;
    private final int ID_ESTADO_ACTIVO = 1;

    // Listas edicion de formato
    private boolean edicionObjetivoInicialB;
    private boolean edicionSeguimientoBitacoraSemanalB;
    private boolean edicionSeguimientoInformeMensualB;
    private boolean edicionCalificacionDesempenoB;
    private boolean edicionEvaluacionFinalLogrosB;
    private boolean edicionInformeFinalPracticaB;
    private boolean edicionResumenSemestralPracticaProfesionalB;
    private boolean edicionSeguimientoTelefonicoPracticaB;

    /**
     * En el login carga el usuario en la sesión
     *
     * @param actionEvent
     */
    @PostConstruct
    public void init() {
        if (sessionBean.getUsuarioSession() != null) {
            usuario = sessionBean.getUsuarioSession();
            cargarMenuRol(usuario);
        } else {
            usuario = new Usuario();
        }
    }

    /**
     * Método que hace la validación del login del usuario
     *
     * @return Menu inicial si fue existoso el ingreso
     */
    public String ingresarBitakora() {
        List<Convenio> convenios = new ArrayList<Convenio>();
        usuario.setIdEstado(new EstadoUsuario(ID_ESTADO_ACTIVO));
        usuario = usuarioSessionBean.validarLogin(usuario);
        if (usuario != null) {
            if (usuario.getIdRol().getIdRol() == ROL_PRACTICANTE) {
                //convenios.add(convenioSessionBean.consultarConvenio(usuario.getEstudiante()));
               /* usuario.getEstudiante().setConvenioList(convenios);*/
            }
            sessionBean.setUsuarioSession(usuario);
            cargarMenuRol(usuario);
            visibleMenu = true;
            return "Menu";
        } else {
            FacesMessage msg = new FacesMessage("El usuario y/o contraseña ingresados no son correctos", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return null;
        }
    }

    /**
     * Habilita el menú correspondiente al usuario que ingreso al sistema
     */
    public void cargarMenuRol(Usuario usuarioRol) {
        switch (usuarioRol.getIdRol().getIdRol()) {
            case ROL_ADMINISTRADOR:
                administracionB = true;    
                listaEntidadesB = true;
                listaSupervisoresB = true;
                listaSupervisoresEntidadB = true;
                listaConveniosB = true;
                listaPracticantesB = true;
                cambioClaveB = true;
                listaCoordinadoresPracticas = true;
                listaCalificacionDesempenoB = true;
                break;
                
            case ROL_COORDINADOR:
                administracionB = true;
                formatosB = true;
                consultarFormatosB = true;
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = true;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = true;
                evaluacionFinalLogrosB = true;
                informeFinalPracticaB = true;
                resumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = true;
                
                listaseguimientoTelefonicoPracticaB = true;
                listaSeguimientoBitacoraSemanalBean = true;
                listaObjetivoInicialB = true;
                listaResumenSemestralPracticaProfesionalB = true;
                listaCalificacionDesempenoB = true;
                listaInformeFinalPracticaB = true;
                listaSeguimientoInformeMensualB = true;
                listaEvaluacionFinalLogrosB = true;
                
                listaEntidadesB = true;
                listaSupervisoresB = true;
                listaSupervisoresEntidadB = true;
                listaConveniosB = true;
                listaPracticantesB = true;
                cambioClaveB = true;
                datosPerfilB = true;
                cargarEntidadB = true;
                cargarConveniosB = true;
                asignarConvenioEstudianteB = true;
                
                break;

            case ROL_SUPERVISOR_UNIVERSITARIO:
                formatosB = true;
                consultarFormatosB = true;
                diligenciarFormatosB = true;
                editarFormatosB = true;
                administracionB = true;
                
                objetivoInicialB = false;
                seguimientoBitacoraSemanalB = false;
                seguimientoInformeMensualB = false;
                calificacionDesempenoB = false;
                evaluacionFinalLogrosB = false;
                informeFinalPracticaB = false;
                resumenSemestralPracticaProfesionalB = true;
                seguimientoTelefonicoPracticaB = true;
                
                listaseguimientoTelefonicoPracticaB = true;
                listaResumenSemestralPracticaProfesionalB = true;
                listaCalificacionDesempenoB = true;
                listaEvaluacionFinalLogrosB = true;
                listaObjetivoInicialB = true;
                listaSeguimientoInformeMensualB = true;
                listaSeguimientoBitacoraSemanalBean = true;
                listaInformeFinalPracticaB = true;
                
                listaEntidadesB = true;
                listaPracticantesB = true;
                cambioClaveB = true;
                datosPerfilB = true;
                listaConveniosB = true;
                listaSupervisoresEntidadB = true;
                listaSeguimientoBitacoraSemanalBean = true;
                
                editarFormatosB = true;
                edicionSeguimientoTelefonicoPracticaB = true;
                edicionResumenSemestralPracticaProfesionalB = true;
                
                break;

            case ROL_SUPERVISOR_ENTIDAD:
                formatosB = true;
                consultarFormatosB = true;
                diligenciarFormatosB = true;
                editarFormatosB = true;
                objetivoInicialB = false;
                seguimientoBitacoraSemanalB = false;
                seguimientoInformeMensualB = false;
                calificacionDesempenoB = true;
                evaluacionFinalLogrosB = false;
                informeFinalPracticaB = false;
                resumenSemestralPracticaProfesionalB = false;
                seguimientoTelefonicoPracticaB = false;
                //listaPracticantesB = true;
                listaCalificacionDesempenoB = true;
                listaSeguimientoInformeMensualB = true;
                listaObjetivoInicialB = true;
                
                cambioClaveB = true;
                datosPerfilB = true;
                
                editarFormatosB = true;
                edicionCalificacionDesempenoB = true;
                
                break;

            case ROL_PRACTICANTE:
                formatosB = true;
                consultarFormatosB = true;
                diligenciarFormatosB = true;
                
                objetivoInicialB = true;
                seguimientoBitacoraSemanalB = true;
                seguimientoInformeMensualB = true;
                calificacionDesempenoB = false;
                evaluacionFinalLogrosB = true;
                informeFinalPracticaB = true;
                resumenSemestralPracticaProfesionalB = false;
                
                listaInformeFinalPracticaB = true;
                listaResumenSemestralPracticaProfesionalB = false;
                listaCalificacionDesempenoB = true;
                listaSeguimientoBitacoraSemanalBean = true;
                listaSeguimientoInformeMensualB = true;
                listaObjetivoInicialB = true;
                listaEvaluacionFinalLogrosB = true;
                
                cambioClaveB = true;
                datosPerfilB = true;
                
                editarFormatosB = true;
                edicionObjetivoInicialB = true;
                edicionSeguimientoBitacoraSemanalB = true;
                edicionSeguimientoInformeMensualB = true;
                edicionInformeFinalPracticaB = true;
                edicionEvaluacionFinalLogrosB = true;
                
                break;
        }

    }

    public String cerrarSesion() {
        visibleMenu = true;
        HttpSession httpSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        if (httpSession != null) {
            httpSession.invalidate();
        }
        return "RegistroUsuario";
    }

    public String cargarSeguimientoBitacoraSemanal() {
        return "SeguimientoBitacoraSemanal";
    }

  
    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public UsuarioInterface getUsuarioSessionBean() {
        return usuarioSessionBean;
    }

    public void setUsuarioSessionBean(UsuarioInterface usuarioSessionBean) {
        this.usuarioSessionBean = usuarioSessionBean;
    }

    public ConvenioInterface getConvenioSessionBean() {
        return convenioSessionBean;
    }

    public void setConvenioSessionBean(ConvenioInterface convenioSessionBean) {
        this.convenioSessionBean = convenioSessionBean;
    }

    public boolean isObjetivoInicialB() {
        return objetivoInicialB;
    }

    public void setObjetivoInicialB(boolean objetivoInicialB) {
        this.objetivoInicialB = objetivoInicialB;
    }

    public boolean isSeguimientoBitacoraSemanalB() {
        return seguimientoBitacoraSemanalB;
    }

    public void setSeguimientoBitacoraSemanalB(boolean seguimientoBitacoraSemanalB) {
        this.seguimientoBitacoraSemanalB = seguimientoBitacoraSemanalB;
    }

    public boolean isSeguimientoInformeMensualB() {
        return seguimientoInformeMensualB;
    }

    public void setSeguimientoInformeMensualB(boolean seguimientoInformeMensualB) {
        this.seguimientoInformeMensualB = seguimientoInformeMensualB;
    }

    public boolean isCalificacionDesempenoB() {
        return calificacionDesempenoB;
    }

    public void setCalificacionDesempenoB(boolean calificacionDesempenoB) {
        this.calificacionDesempenoB = calificacionDesempenoB;
    }

    public boolean isEvaluacionFinalLogrosB() {
        return evaluacionFinalLogrosB;
    }

    public void setEvaluacionFinalLogrosB(boolean evaluacionFinalLogrosB) {
        this.evaluacionFinalLogrosB = evaluacionFinalLogrosB;
    }

    public boolean isInformeFinalPracticaB() {
        return informeFinalPracticaB;
    }

    public void setInformeFinalPracticaB(boolean informeFinalPracticaB) {
        this.informeFinalPracticaB = informeFinalPracticaB;
    }

    public boolean isResumenSemestralPracticaProfesionalB() {
        return resumenSemestralPracticaProfesionalB;
    }

    public void setResumenSemestralPracticaProfesionalB(boolean resumenSemestralPracticaProfesionalB) {
        this.resumenSemestralPracticaProfesionalB = resumenSemestralPracticaProfesionalB;
    }

    public boolean isSeguimientoTelefonicoPracticaB() {
        return seguimientoTelefonicoPracticaB;
    }

    public void setSeguimientoTelefonicoPracticaB(boolean seguimientoTelefonicoPracticaB) {
        this.seguimientoTelefonicoPracticaB = seguimientoTelefonicoPracticaB;
    }

    public boolean isListaPracticantesB() {
        return listaPracticantesB;
    }

    public void setListaPracticantesB(boolean listaPracticantesB) {
        this.listaPracticantesB = listaPracticantesB;
    }

    public boolean isVisibleMenu() {
        return visibleMenu;
    }

    public void setVisibleMenu(boolean visibleMenu) {
        this.visibleMenu = visibleMenu;
    }

    public boolean isListaResumenSemestralPracticaProfesionalB() {
        return listaResumenSemestralPracticaProfesionalB;
    }

    public void setListaResumenSemestralPracticaProfesionalB(boolean listaResumenSemestralPracticaProfesionalB) {
        this.listaResumenSemestralPracticaProfesionalB = listaResumenSemestralPracticaProfesionalB;
    }

    public boolean isListaseguimientoTelefonicoPracticaB() {
        return listaseguimientoTelefonicoPracticaB;
    }

    public void setListaseguimientoTelefonicoPracticaB(boolean listaseguimientoTelefonicoPracticaB) {
        this.listaseguimientoTelefonicoPracticaB = listaseguimientoTelefonicoPracticaB;
    }

    public boolean isListaEntidadesB() {
        return listaEntidadesB;
    }

    public void setListaEntidadesB(boolean listaEntidadesB) {
        this.listaEntidadesB = listaEntidadesB;
    }

    public boolean isCambioClaveB() {
        return cambioClaveB;
    }

    public void setCambioClaveB(boolean cambioClaveB) {
        this.cambioClaveB = cambioClaveB;
    }

    public boolean isDatosPerfilB() {
        return datosPerfilB;
    }

    public void setDatosPerfilB(boolean datosPerfilB) {
        this.datosPerfilB = datosPerfilB;
    }

    public boolean isCargarEntidadB() {
        return cargarEntidadB;
    }

    public void setCargarEntidadB(boolean cargarEntidadB) {
        this.cargarEntidadB = cargarEntidadB;
    }
    
    public boolean isCargarConveniosB() {
        return cargarConveniosB;
    }

    public void setCargarConveniosB(boolean cargarConveniosB) {
        this.cargarConveniosB = cargarConveniosB;
    }

    public boolean isListaSeguimientoBitacoraSemanalBean() {
        return listaSeguimientoBitacoraSemanalBean;
    }

    public void setListaSeguimientoBitacoraSemanalBean(boolean listaSeguimientoBitacoraSemanalBean) {
        this.listaSeguimientoBitacoraSemanalBean = listaSeguimientoBitacoraSemanalBean;
    }

    public boolean isListaSupervisoresB() {
        return listaSupervisoresB;
    }

    public void setListaSupervisoresB(boolean listaSupervisoresB) {
        this.listaSupervisoresB = listaSupervisoresB;
    }

    public boolean isListaSupervisoresEntidadB() {
        return listaSupervisoresEntidadB;
    }

    public void setListaSupervisoresEntidadB(boolean listaSupervisoresEntidadB) {
        this.listaSupervisoresEntidadB = listaSupervisoresEntidadB;
    }

    public boolean isAsignarConvenioEstudianteB() {
        return asignarConvenioEstudianteB;
    }

    public void setAsignarConvenioEstudianteB(boolean asignarConvenioEstudianteB) {
        this.asignarConvenioEstudianteB = asignarConvenioEstudianteB;
    }

    public boolean isListaConveniosB() {
        return listaConveniosB;
    }

    public void setListaConveniosB(boolean listaConveniosB) {
        this.listaConveniosB = listaConveniosB;
    }

    public boolean isFormatos() {
        return formatosB;
    }

    public void setFormatos(boolean formatosB) {
        this.formatosB = formatosB;
    }

    public boolean isAdministracion() {
        return administracionB;
    }

    public void setAdministracion(boolean administracion) {
        this.administracionB = administracion;
    }

    public boolean isConsultarFormatos() {
        return consultarFormatosB;
    }

    public void setConsultarFormatos(boolean consultarFormatos) {
        this.consultarFormatosB = consultarFormatos;
    }

    public boolean isDiligenciarFormatos() {
        return diligenciarFormatosB;
    }

    public void setDiligenciarFormatos(boolean diligenciarFormatos) {
        this.diligenciarFormatosB = diligenciarFormatos;
    }

    public boolean isListaCalificacionDesempenoB() {
        return listaCalificacionDesempenoB;
    }

    public void setListaCalificacionDesempenoB(boolean listaCalificacionDesempenoB) {
        this.listaCalificacionDesempenoB = listaCalificacionDesempenoB;
    }

    public boolean isListaEvaluacionFinalLogrosB() {
        return listaEvaluacionFinalLogrosB;
    }

    public void setListaEvaluacionFinalLogrosB(boolean listaEvaluacionFinalLogrosB) {
        this.listaEvaluacionFinalLogrosB = listaEvaluacionFinalLogrosB;
    }

    public boolean isListaInformeFinalPracticaB() {
        return listaInformeFinalPracticaB;
    }

    public void setListaInformeFinalPracticaB(boolean listaInformeFinalPracticaB) {
        this.listaInformeFinalPracticaB = listaInformeFinalPracticaB;
    }

    public boolean isListaSeguimientoInformeMensualB() {
        return listaSeguimientoInformeMensualB;
    }

    public void setListaSeguimientoInformeMensualB(boolean listaSeguimientoInformeMensualB) {
        this.listaSeguimientoInformeMensualB = listaSeguimientoInformeMensualB;
    }

    public boolean isListaObjetivoInicialB() {
        return listaObjetivoInicialB;
    }

    public void setListaObjetivoInicialB(boolean listaObjetivoInicialB) {
        this.listaObjetivoInicialB = listaObjetivoInicialB;
    }

    public boolean isFormatosB() {
        return formatosB;
    }

    public void setFormatosB(boolean formatosB) {
        this.formatosB = formatosB;
    }

    public boolean isAdministracionB() {
        return administracionB;
    }

    public void setAdministracionB(boolean administracionB) {
        this.administracionB = administracionB;
    }

    public boolean isConsultarFormatosB() {
        return consultarFormatosB;
    }

    public void setConsultarFormatosB(boolean consultarFormatosB) {
        this.consultarFormatosB = consultarFormatosB;
    }

    public boolean isDiligenciarFormatosB() {
        return diligenciarFormatosB;
    }

    public void setDiligenciarFormatosB(boolean diligenciarFormatosB) {
        this.diligenciarFormatosB = diligenciarFormatosB;
    }

    public boolean isEditarFormatosB() {
        return editarFormatosB;
    }

    public void setEditarFormatosB(boolean editarFormatosB) {
        this.editarFormatosB = editarFormatosB;
    }

    public boolean isListaCoordinadoresPracticas() {
        return listaCoordinadoresPracticas;
    }

    public void setListaCoordinadoresPracticas(boolean listaCoordinadoresPracticas) {
        this.listaCoordinadoresPracticas = listaCoordinadoresPracticas;
    }

    public boolean isEdicionObjetivoInicialB() {
        return edicionObjetivoInicialB;
    }

    public void setEdicionObjetivoInicialB(boolean edicionObjetivoInicialB) {
        this.edicionObjetivoInicialB = edicionObjetivoInicialB;
    }

    public boolean isEdicionSeguimientoBitacoraSemanalB() {
        return edicionSeguimientoBitacoraSemanalB;
    }

    public void setEdicionSeguimientoBitacoraSemanalB(boolean edicionSeguimientoBitacoraSemanalB) {
        this.edicionSeguimientoBitacoraSemanalB = edicionSeguimientoBitacoraSemanalB;
    }

    public boolean isEdicionSeguimientoInformeMensualB() {
        return edicionSeguimientoInformeMensualB;
    }

    public void setEdicionSeguimientoInformeMensualB(boolean edicionSeguimientoInformeMensualB) {
        this.edicionSeguimientoInformeMensualB = edicionSeguimientoInformeMensualB;
    }

    public boolean isEdicionCalificacionDesempenoB() {
        return edicionCalificacionDesempenoB;
    }

    public void setEdicionCalificacionDesempenoB(boolean edicionCalificacionDesempenoB) {
        this.edicionCalificacionDesempenoB = edicionCalificacionDesempenoB;
    }

    public boolean isEdicionEvaluacionFinalLogrosB() {
        return edicionEvaluacionFinalLogrosB;
    }

    public void setEdicionEvaluacionFinalLogrosB(boolean edicionEvaluacionFinalLogrosB) {
        this.edicionEvaluacionFinalLogrosB = edicionEvaluacionFinalLogrosB;
    }

    public boolean isEdicionInformeFinalPracticaB() {
        return edicionInformeFinalPracticaB;
    }

    public void setEdicionInformeFinalPracticaB(boolean edicionInformeFinalPracticaB) {
        this.edicionInformeFinalPracticaB = edicionInformeFinalPracticaB;
    }

    public boolean isEdicionResumenSemestralPracticaProfesionalB() {
        return edicionResumenSemestralPracticaProfesionalB;
    }

    public void setEdicionResumenSemestralPracticaProfesionalB(boolean edicionResumenSemestralPracticaProfesionalB) {
        this.edicionResumenSemestralPracticaProfesionalB = edicionResumenSemestralPracticaProfesionalB;
    }

    public boolean isEdicionSeguimientoTelefonicoPracticaB() {
        return edicionSeguimientoTelefonicoPracticaB;
    }

    public void setEdicionSeguimientoTelefonicoPracticaB(boolean edicionSeguimientoTelefonicoPracticaB) {
        this.edicionSeguimientoTelefonicoPracticaB = edicionSeguimientoTelefonicoPracticaB;
    }
    
    
}
